<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 传值和传址
        // 1.简单数据类型（传值） 2.复杂数据类型 ：数组 对象 函数  （传址）；
        // 内存存储的情况 ：栈内存(有序排列)   堆内存（无序排列）
        // 一 、在赋值过程中所有的基本数据类型都是传值；
        // var a = 10;
        // var b = a;
        // b =  20;
        // console.log(a);
        // 二、如果是复杂数据类型那么赋值都是传址
        // 如果是传址会产生引用问题；
        // var obj = {
        //     name:"张三",
        //     age:20
        // }
        // var obj1 = obj;
        // obj1.name = "李四";
        // // 我打印的是obj 但是我改的是 obj1的name  就是说obj1引用obj里的内容 相互之间会互相影响；
        // console.log(obj);
        // var arr = ['张三','李四','王五'];
        // var arr2 = arr;
        // arr2[1] = "修改";
        // console.log(arr);

        // 三、函数参数问题
        // 简单数据类型作为参数，不会出现引用问题
            // function fn(arg) {
            //     arg = 10;
            //     console.log(arg);
            // }
            // var a = 20;
            // fn(a);
            // console.log(a);

        // 换成复杂数据类型传参数
        // 结论 复杂数据类型作为参数传递，也会出现引用关系。相互之间会影响；
        // obj1 = obj;  //也会 出现引用关系
        function fn(obj1) {
            obj1.name = "函数里修改的值";
            console.log(obj1);
        }
        var obj = {
            name:"张三"
        }
        fn(obj);
        console.log(obj);


    </script>
</body>
</html>